if (typeof jQuery === "undefined") {
	throw new Error("jQuery plugins need to be before this file");
}

$.AdminBSB = {};
$.AdminBSB.options = {
	colors: {
		red: '#F44336',
		pink: '#E91E63',
		purple: '#9C27B0',
		deepPurple: '#673AB7',
		indigo: '#3F51B5',
		blue: '#2196F3',
		lightBlue: '#03A9F4',
		cyan: '#00BCD4',
		teal: '#009688',
		green: '#4CAF50',
		lightGreen: '#8BC34A',
		lime: '#CDDC39',
		yellow: '#ffe821',
		amber: '#FFC107',
		orange: '#FF9800',
		deepOrange: '#FF5722',
		brown: '#795548',
		grey: '#9E9E9E',
		blueGrey: '#607D8B',
		black: '#000000',
		white: '#ffffff'
	},
	leftSideBar: {
		scrollColor: 'rgba(0,0,0,0.5)',
		scrollWidth: '4px',
		scrollAlwaysVisible: false,
		scrollBorderRadius: '0',
		scrollRailBorderRadius: '0',
		scrollActiveItemWhenPageLoad: true,
		breakpointWidth: 1170
	},
	dropdownMenu: {
		effectIn: 'fadeIn',
		effectOut: 'fadeOut'
	}
}

/* Left Sidebar - Function =================================================================================================
*  You can manage the left sidebar menu options
*  
*/
$.AdminBSB.leftSideBar = {
	activate: function () {
		var _this = this;
		var $body = $('body');
		var $overlay = $('.overlay');

		//Close sidebar
		$(window).click(function (e) {
			var $target = $(e.target);
			if (e.target.nodeName.toLowerCase() === 'i') { $target = $(e.target).parent(); }

			if (!$target.hasClass('bars') && _this.isOpen() && $target.parents('#leftsidebar').length === 0) {
				if (!$target.hasClass('js-right-sidebar')) $overlay.fadeOut();
				$body.removeClass('overlay-open');
			}
		});

		$.each($('.menu-toggle.toggled'), function (i, val) {
			$(val).next().slideToggle(0);
		});

		//When page load
		$.each($('.menu .list li.active'), function (i, val) {
			var $activeAnchors = $(val).find('a:eq(0)');

			$activeAnchors.addClass('toggled');
			$activeAnchors.next().show();
		});

		//Collapse or Expand Menu
		$('.menu-toggle').on('click', function (e) {
			var $this = $(this);
			var $content = $this.next();

			if ($($this.parents('ul')[0]).hasClass('list')) {
				var $not = $(e.target).hasClass('menu-toggle') ? e.target : $(e.target).parents('.menu-toggle');

				$.each($('.menu-toggle.toggled').not($not).next(), function (i, val) {
					if ($(val).is(':visible')) {
						$(val).prev().toggleClass('toggled');
						$(val).slideUp();
					}
				});
			}

			$this.toggleClass('toggled');
			$content.slideToggle(320);
		});

		//Set menu height
		_this.setMenuHeight();
		_this.checkStatuForResize(true);
		$(window).resize(function () {
			_this.setMenuHeight();
			_this.checkStatuForResize(false);
		});

		//Set Waves
		Waves.attach('.menu .list a', ['waves-block']);
		Waves.init();
	},
	setMenuHeight: function (isFirstTime) {
		if (typeof $.fn.slimScroll != 'undefined') {
			var configs = $.AdminBSB.options.leftSideBar;
			var height = ($(window).height() - ($('.legal').outerHeight() + $('.user-info').outerHeight() + $('.navbar').innerHeight()));
			var $el = $('.list');

			$el.slimscroll({
				height: height + "px",
				color: configs.scrollColor,
				size: configs.scrollWidth,
				alwaysVisible: configs.scrollAlwaysVisible,
				borderRadius: configs.scrollBorderRadius,
				railBorderRadius: configs.scrollRailBorderRadius
			});

			//Scroll active menu item when page load, if option set = true
            if ($.AdminBSB.options.leftSideBar.scrollActiveItemWhenPageLoad) {
                var item = $('.menu .list li.active').get(0);
                if (item) {
                    var activeItemOffsetTop = item.offsetTop
                    if (activeItemOffsetTop > 150) $el.slimscroll({ scrollTo: activeItemOffsetTop + 'px' });
                }
			}
		}
	},
	checkStatuForResize: function (firstTime) {
		var $body = $('body');
		var $openCloseBar = $('.navbar .navbar-header .bars');
		var width = $body.width();

		if (firstTime) {
			$body.find('.content, .sidebar').addClass('no-animate').delay(1000).queue(function () {
				$(this).removeClass('no-animate').dequeue();
			});
		}

		if (width < $.AdminBSB.options.leftSideBar.breakpointWidth) {
			$body.addClass('ls-closed');
			$openCloseBar.fadeIn();
		}
		else {
			$body.removeClass('ls-closed');
			$openCloseBar.fadeOut();
		}
	},
	isOpen: function () {
		return $('body').hasClass('overlay-open');
	}
};
//==========================================================================================================================

/* Right Sidebar - Function ================================================================================================
*  You can manage the right sidebar menu options
*  
*/
$.AdminBSB.rightSideBar = {
	activate: function () {
		var _this = this;
		var $sidebar = $('#rightsidebar');
		var $overlay = $('.overlay');

		//Close sidebar
		$(window).click(function (e) {
			var $target = $(e.target);
			if (e.target.nodeName.toLowerCase() === 'i') { $target = $(e.target).parent(); }

			if (!$target.hasClass('js-right-sidebar') && _this.isOpen() && $target.parents('#rightsidebar').length === 0) {
				if (!$target.hasClass('bars')) $overlay.fadeOut();
				$sidebar.removeClass('open');
			}
		});

		$('.js-right-sidebar').on('click', function () {
			$sidebar.toggleClass('open');
			if (_this.isOpen()) { $overlay.fadeIn(); } else { $overlay.fadeOut(); }
		});
	},
	isOpen: function () {
		return $('.right-sidebar').hasClass('open');
	}
}
//==========================================================================================================================

/* Searchbar - Function ================================================================================================
*  You can manage the search bar
*  
*/
var $searchBar = $('.search-bar');
$.AdminBSB.search = {
	activate: function () {
		var _this = this;

		//Search button click event
		$('.js-search').on('click', function () {
			_this.showSearchBar();
		});

		//Close search click event
		$searchBar.find('.close-search').on('click', function () {
			_this.hideSearchBar();
		});

		//ESC key on pressed
		$searchBar.find('input[type="text"]').on('keyup', function (e) {
			if (e.keyCode == 27) {
				_this.hideSearchBar();
			}
		});
	},
	showSearchBar: function () {
		$searchBar.addClass('open');
		$searchBar.find('input[type="text"]').focus();
	},
	hideSearchBar: function () {
		$searchBar.removeClass('open');
		$searchBar.find('input[type="text"]').val('');
	}
}
//==========================================================================================================================

/* Navbar - Function =======================================================================================================
*  You can manage the navbar
*  
*/
$.AdminBSB.navbar = {
	activate: function () {
		var $body = $('body');
		var $overlay = $('.overlay');

		//Open left sidebar panel
		$('.bars').on('click', function () {
			$body.toggleClass('overlay-open');
			if ($body.hasClass('overlay-open')) { $overlay.fadeIn(); } else { $overlay.fadeOut(); }
		});

		//Close collapse bar on click event
		$('.nav [data-close="true"]').on('click', function () {
			var isVisible = $('.navbar-toggle').is(':visible');
			var $navbarCollapse = $('.navbar-collapse');

			if (isVisible) {
				$navbarCollapse.slideUp(function () {
					$navbarCollapse.removeClass('in').removeAttr('style');
				});
			}
		});
	}
}
//==========================================================================================================================

/* Input - Function ========================================================================================================
*  You can manage the inputs(also textareas) with name of class 'form-control'
*  
*/
$.AdminBSB.input = {
	activate: function () {
		//On focus event
		$('.form-control').focus(function () {
			$(this).parent().addClass('focused');
		});

		//On focusout event
		$('.form-control').focusout(function () {
			var $this = $(this);
			if ($this.parents('.form-group').hasClass('form-float')) {
				if ($this.val() == '') { $this.parents('.form-line').removeClass('focused'); }
				//else if (!$(this).parent().hasClass('focused')) $(this).parent().addClass('focused');
			}
			else {
				$this.parents('.form-line').removeClass('focused');
			}
		});

		//On label click
		$('body').on('click', '.form-float .form-line .form-label', function () {
			$(this).parent().find('input').focus();
		});

		//Not blank form
		$('.form-control').each(function () {
			if ($(this).val() !== '') {
				$(this).parents('.form-line').addClass('focused');
			}
		});
	}
}
//==========================================================================================================================

/* Form - Select - Function ================================================================================================
*  You can manage the 'select' of form elements
*  
*/
$.AdminBSB.select = {
	activate: function () {
		if ($.fn.selectpicker) { $('select:not(.ms)').selectpicker(); }
	}
}
//==========================================================================================================================

/* DropdownMenu - Function =================================================================================================
*  You can manage the dropdown menu
*  
*/

$.AdminBSB.dropdownMenu = {
	activate: function () {
		var _this = this;

		$('.dropdown, .dropup, .btn-group').on({
			"show.bs.dropdown": function () {
				var dropdown = _this.dropdownEffect(this);
				_this.dropdownEffectStart(dropdown, dropdown.effectIn);
			},
			"shown.bs.dropdown": function () {
				var dropdown = _this.dropdownEffect(this);
				if (dropdown.effectIn && dropdown.effectOut) {
					_this.dropdownEffectEnd(dropdown, function () { });
				}
			},
			"hide.bs.dropdown": function (e) {
				var dropdown = _this.dropdownEffect(this);
				if (dropdown.effectOut) {
					e.preventDefault();
					_this.dropdownEffectStart(dropdown, dropdown.effectOut);
					_this.dropdownEffectEnd(dropdown, function () {
						dropdown.dropdown.removeClass('open');
					});
				}
			}
		});

		//Set Waves
		Waves.attach('.dropdown-menu li a', ['waves-block']);
		Waves.init();
	},
	dropdownEffect: function (target) {
		var effectIn = $.AdminBSB.options.dropdownMenu.effectIn, effectOut = $.AdminBSB.options.dropdownMenu.effectOut;
		var dropdown = $(target), dropdownMenu = $('.dropdown-menu', target);

		if (dropdown.length > 0) {
			var udEffectIn = dropdown.data('effect-in');
			var udEffectOut = dropdown.data('effect-out');
			if (udEffectIn !== undefined) { effectIn = udEffectIn; }
			if (udEffectOut !== undefined) { effectOut = udEffectOut; }
		}

		return {
			target: target,
			dropdown: dropdown,
			dropdownMenu: dropdownMenu,
			effectIn: effectIn,
			effectOut: effectOut
		};
	},
	dropdownEffectStart: function (data, effectToStart) {
		if (effectToStart) {
			data.dropdown.addClass('dropdown-animating');
			data.dropdownMenu.addClass('animated dropdown-animated');
			data.dropdownMenu.addClass(effectToStart);
		}
	},
	dropdownEffectEnd: function (data, callback) {
		var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';
		data.dropdown.one(animationEnd, function () {
			data.dropdown.removeClass('dropdown-animating');
			data.dropdownMenu.removeClass('animated dropdown-animated');
			data.dropdownMenu.removeClass(data.effectIn);
			data.dropdownMenu.removeClass(data.effectOut);

			if (typeof callback == 'function') {
				callback();
			}
		});
	}
}
//==========================================================================================================================

/* Browser - Function ======================================================================================================
*  You can manage browser
*  
*/
var edge = 'Microsoft Edge';
var ie10 = 'Internet Explorer 10';
var ie11 = 'Internet Explorer 11';
var opera = 'Opera';
var firefox = 'Mozilla Firefox';
var chrome = 'Google Chrome';
var safari = 'Safari';

$.AdminBSB.browser = {
	activate: function () {
		var _this = this;
		var className = _this.getClassName();

		if (className !== '') $('html').addClass(_this.getClassName());
	},
	getBrowser: function () {
		var userAgent = navigator.userAgent.toLowerCase();

		if (/edge/i.test(userAgent)) {
			return edge;
		} else if (/rv:11/i.test(userAgent)) {
			return ie11;
		} else if (/msie 10/i.test(userAgent)) {
			return ie10;
		} else if (/opr/i.test(userAgent)) {
			return opera;
		} else if (/chrome/i.test(userAgent)) {
			return chrome;
		} else if (/firefox/i.test(userAgent)) {
			return firefox;
		} else if (!!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)) {
			return safari;
		}

		return undefined;
	},
	getClassName: function () {
		var browser = this.getBrowser();

		if (browser === edge) {
			return 'edge';
		} else if (browser === ie11) {
			return 'ie11';
		} else if (browser === ie10) {
			return 'ie10';
		} else if (browser === opera) {
			return 'opera';
		} else if (browser === chrome) {
			return 'chrome';
		} else if (browser === firefox) {
			return 'firefox';
		} else if (browser === safari) {
			return 'safari';
		} else {
			return '';
		}
	}
}
//==========================================================================================================================

$(function () {
	$.AdminBSB.browser.activate();
	$.AdminBSB.leftSideBar.activate();
	$.AdminBSB.rightSideBar.activate();
	$.AdminBSB.navbar.activate();
	$.AdminBSB.dropdownMenu.activate();
	$.AdminBSB.input.activate();
	$.AdminBSB.select.activate();
	$.AdminBSB.search.activate();

	setTimeout(function () { $('.page-loader-wrapper').fadeOut(); }, 50);
});